# 从flask包导入Flask类
from flask import Flask
# 从flask_sqlalchemy导入SQLAlchemy ORM工具
from flask_sqlalchemy import SQLAlchemy
# 从flask_migrate导入数据库迁移工具
from flask_migrate import Migrate
# 从config.py导入配置类
from config import Config
# 导入redis数据库客户端
import redis
# 导入MySQL数据库驱动
import pymysql

# 将pymysql注册为MySQLdb,用于兼容性
pymysql.install_as_MySQLdb()

# 创建SQLAlchemy实例
db = SQLAlchemy()
# 创建数据库迁移工具实例
migrate = Migrate()
# 定义全局redis客户端变量
redis_client = None


def create_app():
    # 创建Flask应用实例
    app = Flask(__name__)
    # 从Config对象加载配置
    app.config.from_object(Config)

    # 初始化数据库
    db.init_app(app)
    # 初始化数据库迁移工具
    migrate.init_app(app, db)

    # 声明使用全局redis_client变量
    global redis_client
    # 创建Redis连接
    redis_client = redis.Redis(
        host=app.config['REDIS_HOST'],      # Redis服务器地址
        port=app.config['REDIS_PORT'],      # Redis端口
        db=app.config['REDIS_DB'],          # Redis数据库编号
        password=app.config['REDIS_PASSWORD']# Redis密码
    )

    # 导入视图、模型和调度器模块
    from . import views, models, scheduler
    # 初始化视图路由
    views.init_app(app)

    # 返回创建的应用实例
    return app